package cn.gov.cus.rmftquartz.thread;

import cn.gov.cus.rmftquartz.entity.ENTRY_HEAD;
import cn.gov.cus.rmftquartz.entity.ENTRY_LIST;
import cn.gov.cus.rmftquartz.entity.ManifestChkNewVo;
import cn.gov.cus.rmftquartz.service.entry.ScheduledEntryService;

import java.util.Date;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 线程里又可以再开线程，并且可以将executor当变量传递到service方法中，使service方法中的操作所用的线程池和此线程类之后的操作所用的线程池是同一个。
 * （在之后的操作，不需要service方法中的那一系列操作线程执行完，便可以执行的前提下。否则还得等之前的子线程彻底走完，再开新的线程池。）
 * 且多个子线程可以同时调用一个service中的一个方法，没有变化的全局变量的话，是线程安全的。本身java的方法就是可以多线程调用的。
 * @author wxming.
 * @date 2018/2/11.
 */
public class PrepareBatchDataTimeOkThread implements Runnable {
    private ThreadPoolExecutor executor;
    /**
     * 使用线程安全的队列类，让多线程操作同一个队列里对象，将所有线程里的结果汇聚在一个变量里。
     */
    private Queue<ENTRY_HEAD> entryHeadQueue;
    private Queue<ENTRY_LIST> entryListQueue;

    private List<ManifestChkNewVo> entryBatchToThreadList;
    private Date batchTime;
    private ScheduledEntryService scheduledEntryService;
    private String hashcode;
    private int entryPrepareDataBatchPoolSize;

    public PrepareBatchDataTimeOkThread(List<ManifestChkNewVo> entryBatchToThreadList, Date batchTime, ScheduledEntryService scheduledEntryService, String hashcode, int entryPrepareDataBatchPoolSize) {
        this.entryBatchToThreadList = entryBatchToThreadList;
        this.batchTime = batchTime;
        this.scheduledEntryService = scheduledEntryService;
        this.hashcode = hashcode;
        this.entryPrepareDataBatchPoolSize = entryPrepareDataBatchPoolSize;
    }

    @Override
    public void run() {
        entryHeadQueue=new ConcurrentLinkedDeque<>();
        entryListQueue=new ConcurrentLinkedDeque<>();
        /*在再开的子线程中这么使用一下的offer方法给队列类添加数据。
        ENTRY_HEAD entryHead = new ENTRY_HEAD();
        entryHeadQueue.offer(entryHead);*/
    }
}
